home *** CD-ROM | disk | FTP | other *** search
/ EuroCD 3 / EuroCD 3.iso / Programming / vbcc / vbc.h < prev    next >
C/C++ Source or Header  |  1998-06-24  |  7KB  |  211 lines

  1. /*  $VER: vbcc (vbc.h) V0.4     */
  2.  
  3. #include "supp.h"
  4.  
  5. #define eval_constn(a) eval_const(&a->val,a->ntyp->flags)
  6.  
  7. struct identifier_list{
  8.     char *identifier;
  9.     int length;
  10.     struct identifier_list *next;
  11. };
  12. struct struct_identifier{
  13. /*    int flags;*/
  14.     char *identifier;
  15.     struct struct_declaration *sd;
  16.     struct struct_identifier *next;
  17. };
  18.  
  19. #ifndef NODES
  20. struct node{
  21.     int flags,lvalue,sidefx;
  22.     struct Typ *ntyp;
  23.     struct node *left;
  24.     struct node *right;
  25.     struct argument_list *alist;
  26.     char *identifier;
  27.     union atyps val;
  28.     struct obj o;
  29. };
  30.  
  31. typedef struct node *np;
  32.  
  33. #define NODES sizeof(struct node)
  34. #endif
  35.  
  36. struct argument_list{
  37.     np  arg;
  38.     struct argument_list *next;
  39. };
  40.  
  41.  
  42. #define MAXI 100 /* maximale Laenge von Identifiers in Bytes    */
  43. #define MAXINPUT 2000    /* maximale Laenge einer Eingabezeile in Bytes  */
  44. #define MAXN 64 /* maximale Verschachtelung von Bloecken */
  45.  
  46. extern struct Typ *arith_typ(struct Typ*,struct Typ *);
  47. extern void insert_const(np);
  48. extern int int_erw(int);
  49. extern int type_expression(np),compare_pointers(struct Typ *,struct Typ *,int),
  50.     compare_sd(struct struct_declaration *,struct struct_declaration *);
  51. extern np identifier_expression(void),constant_expression(void),string_expression(void),
  52.    postfix_expression(void),unary_expression(void),cast_expression(void),
  53.    multiplicative_expression(void),additive_expression(void),
  54.    shift_expression(void),relational_expression(void),equality_expression(void),
  55.    and_expression(void),exclusive_or_expression(void),
  56.    inclusive_or_expression(void),logical_and_expression(void),
  57.    logical_or_expression(void),conditional_expression(void),
  58.    assignment_expression(void),expression(void),primary_expression(void);
  59. /* puh  */
  60. extern void pre(FILE *,np),pra(FILE *,struct argument_list *);
  61. extern void free_expression(np),free_alist(struct argument_list *);
  62. extern void cpbez(char *m,int ckw),cpnum(char *m),killsp(void);
  63. extern struct struct_declaration *add_sd(struct struct_declaration *);
  64. extern void add_sl(struct struct_declaration *,struct struct_list (*)[]);
  65. extern void free_sd(struct struct_declaration *);
  66. extern void prl(FILE *,struct struct_declaration *);
  67. extern char *add_identifier(char *,int);
  68. extern struct Typ *declarator(struct Typ *),*direct_declarator(struct Typ *),
  69.            *pointer(struct Typ *),*declaration_specifiers(void);
  70. extern int declaration(int),type_uncomplete(struct Typ *);
  71. extern struct struct_declaration *find_struct(char *,int);
  72. extern void add_struct_identifier(char *,struct struct_declaration *);
  73. extern void free_si(struct struct_identifier *);
  74. extern char *s,*ident;
  75. extern char string[MAXINPUT+2],number[MAXI],buff[MAXI];
  76. extern struct struct_declaration *first_sd[MAXN],*last_sd[MAXN],*merk_sdf,*merk_sdl;
  77. extern struct struct_identifier *first_si[MAXN],*last_si[MAXN],*merk_sif,*merk_sil;
  78. extern struct identifier_list *first_ilist[MAXN],*last_ilist[MAXN],*merk_ilistf,*merk_ilistl;
  79. extern void free_ilist(struct identifier_list *);
  80. extern int nesting;
  81. extern struct Var *first_var[MAXN],*last_var[MAXN],*merk_varf,*merk_varl;
  82. extern void free_var(struct Var *);
  83. extern void var_declaration(void);
  84. extern int storage_class_specifiers(void);
  85. extern void enter_block(void),leave_block(void);
  86. extern struct Var *find_var(char *,int);
  87. extern struct Var *add_var(char *,struct Typ *,int,struct const_list *);
  88.  
  89. extern int usz;
  90.  
  91. extern void gen_IC(np,int,int),convert(np,int),gen_label(int),savescratch(int,struct IC *,int);
  92. struct regargs_list{
  93.     struct regargs_list *next;
  94.     int reg;
  95.     struct Var *v;
  96. };
  97. #ifdef HAVE_REGPARMS
  98. extern zlong push_args(struct argument_list *,struct struct_declaration *,int,struct regargs_list **,struct reg_handle *,struct obj *,int);
  99. #else
  100. extern zlong push_args(struct argument_list *,struct struct_declaration *,int,struct regargs_list **);
  101. #endif
  102. extern int allocreg(int,int);
  103. extern void free_reg(int);
  104.  
  105. extern FILE *out,*ic1,*ic2,*ppout;
  106.  
  107. extern void statement(void),labeled_statement(void),if_statement(void);
  108. extern void switch_statement(void),while_statement(void),for_statement(void);
  109. extern void do_statement(void),goto_statement(void),continue_statement(void);
  110. extern void break_statement(void),return_statement(void);
  111. extern void expression_statement(void),compound_statement(void);
  112. extern void translation_unit(void);
  113. extern int main(int, char *[]);
  114. extern int nocode,registerpri,looppri,currentpri;
  115.  
  116. extern np makepointer(np);
  117.  
  118. extern int switch_typ,switch_count,switch_act;
  119. struct llist{
  120.     char *identifier;
  121.     int label,flags,switch_count;
  122.     struct llist *next;
  123.     union atyps val;
  124. };
  125. #define LABELDEFINED 1
  126. #define LABELUSED 2
  127. #define LABELDEFAULT 4
  128. #define LSIZE sizeof(struct llist)
  129. extern struct llist *first_llist,*last_llist;
  130. extern struct llist *find_label(char *),*add_label(char *);
  131. extern void free_llist(struct llist *);
  132.  
  133. extern int endok,return_label,return_value,break_label;
  134. extern struct Var *return_var;
  135. extern struct Typ *return_typ;
  136. extern zlong local_offset[MAXN];
  137.  
  138. extern void scratch_var(struct obj *,int,struct Typ *);
  139. extern void get_scratch(struct obj *,int,int,struct Typ *);
  140. extern void gen_cond(struct obj *,int,int,int);
  141.  
  142. #define MAXCF 30
  143. extern int c_flags[MAXCF];
  144. extern char *c_flags_name[MAXCF];
  145. extern union ppi c_flags_val[MAXCF];
  146.  
  147. extern FILE *open_out(char *,char *);
  148.  
  149. extern char *inname;
  150.  
  151. extern void gen_vars(struct Var *);
  152.  
  153. /*  Format der Tabelle fuer Fehlermeldungen */
  154. struct err_out{
  155.     char *text;
  156.     int  flags;
  157. };
  158. /*  Flags fuer err_out.flags    */
  159. #define ERROR       1
  160. #define WARNING     2
  161. #define ANSIV       4
  162. #define INTERNAL    8
  163. #define FATAL      16
  164. #define MESSAGE    32
  165. #define DONTWARN   64
  166. #define PREPROC   128
  167. #define NOLINE    256
  168. #define INFUNC    512
  169. #define INIC     1024
  170.  
  171. extern struct err_out err_out[];
  172. extern int err_num;
  173.  
  174. extern int afterlabel;
  175.  
  176. extern int errors;
  177.  
  178. /*  fuer den Praeprozessor  */
  179.  
  180. #define MAXPPINPUT 2000     /*  maximale Laenge einer Eingabezeile  */
  181. #define MAXINCNESTING 50    /*  maximale Verschachtelung von Includes   */
  182.  
  183. extern FILE *in[MAXINCNESTING];    /*  Sourcefiles     */
  184. extern int zn[MAXINCNESTING];      /*  Zeilennummern   */
  185. extern char *filename[MAXINCNESTING];   /*  Filenamen   */
  186. extern int incnesting;             /*  aktuelle Verschachtelungstiefe  */
  187. extern unsigned long linenr;                 /*  Zeilennummer */
  188.  
  189. #define MAXINCPATHS 20      /*  maximale Anzahl der Includepfade    */
  190.  
  191. extern char *incpath[MAXINCPATHS];   /*  Includepfade    */
  192.                                             /*  Rest ist NULL   */
  193.  
  194. extern int incpathc;     /*  Anzahl der Includepfade     */
  195.  
  196. extern int pp_init(void);
  197. extern void pp_free(void);
  198. extern int pp_include(char *filename);
  199. extern int pp_nextline(void);
  200. extern int pp_define(char *text);
  201.  
  202. extern int read_new_line;
  203. extern int float_used;
  204. extern char *cur_func;
  205. extern int line;
  206. extern void free_clist(struct const_list *);
  207. extern struct const_list *first_clist,*last_clist;
  208. extern struct Var *regsbuf[MAXR+1];
  209. extern int regbnesting[MAXR+1];
  210.  
  211.